package com.comment.pojo.domain.logic.domain;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;
import com.comment.pojo.domain.logic.core.CoreTaskConfig;
import com.comment.pojo.domain.logic.core.Target;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import javax.validation.constraints.NotNull;

/**
 * 玩家任务表(PlayerTask)表实体类
 *
 * @author cxy
 * @since 2024-11-05 11:40:54
 */
@ApiModel("玩家任务表")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = true)
@TableName(autoResultMap = true)
public class PlayerTask extends Model<PlayerTask> {// swagger2,mybatis-plus
    ///////////////////////////////////////////////////////////////////////////////////////////////////////// 生成实体字段
    @TableId(type = IdType.AUTO)
    @ApiModelProperty("主键")
    private Long id;

    @ApiModelProperty("玩家id")
    private Long playerId;

    @ApiModelProperty("任务id")
    private Long taskId;

    @TableField(typeHandler = Fastjson2TypeHandler.class)
    @ApiModelProperty("完成进度")
    public Map<Integer, Target> progress = new HashMap<>();

    @ApiModelProperty("是否完成")
    private Integer isFinish = 0;

    @ApiModelProperty("是否领取奖励")
    private Integer isReceive = 0;

    @TableField(exist = false)
    @ApiModelProperty("前置任务id")
    private Long pid;

    @ApiModelProperty("分组  1.日常 2.战令 3.成就")
    private Integer grouping;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////// 序列化版本号
    @TableField(exist = false)
    private static final long serialVersionUID = 644214395056605428L;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 获取主键值
    @Override
    public Serializable pkVal() {
        return this.id;
    }



    ///////////////////////////////////////////////////////////////////////////////////////////////////////// 非数据库字段
    /////////////////////////////////////////////////////////////////////////////////////////////////////////    领域业务

    /**
     * 清空进度
     */
    public void clear() {
        progress = new HashMap<>();
        isFinish = 0;
        isReceive = 0;
    }

    public void checkProgress() {
        progress.forEach((k, v) -> {
            if (v.isComplete()) {
                isFinish = 1;
            }
        });
    }
}

